home *** CD-ROM | disk | FTP | other *** search
Text File | 1994-09-20 | 69.6 KB | 2 lines | [TEXT/ALFA] |
- #############################################################################
- #############################################################################
- #
- # latex.tcl, version 2.3: macros and bindings for LaTeX users
- #
- # -- see "LaTeX Help" and "LaTeX Key Bindings" on the Help menu
- # -- command summaries suitable for printing ("latex_commands.tex"
- # and "latex_keys.tex") will be found in the LaTeX folder.
- #
- #############################################################################
- #
- # version 1.1 and 1.2 (11/10/92) by Richard T. Austin (austin@eecs.umich.edu)
- # version 2.0--2.2 and 2.3 (9/15/94) by Tom Scavo (trscavo@syr.edu)
- #
- # If you make improvements to this file, please share them!
- #
- #############################################################################
- #############################################################################
-
-
- #--------------------------------------------------------------------------
- # Autoload procedure:
- #--------------------------------------------------------------------------
-
- proc dummyTeX {} {}
-
- #--------------------------------------------------------------------------
- # Other macro packages:
- #--------------------------------------------------------------------------
-
- source "$HOME:Tcl:UserCode:smart.tcl"
-
- #--------------------------------------------------------------------------
- # Flags and Variables:
- #--------------------------------------------------------------------------
-
- set true 1
- set false 0
-
- # Flags:
- newModeVar TeX optionIsMeta $false 1
- newModeVar TeX useBoxMacro $true 1
- newModeVar TeX useDollarSigns $false 1
- newModeVar TeX searchNoisily $true 1
- newModeVar TeX promptNoisily $true 1
- newModeVar TeX deleteObjectNoisily $true 1
- newModeVar TeX deleteEnvironmentNoisily $true 1
- newModeVar TeX wordWrap $true 1
- newModeVar TeX useStatusBar $true 1
-
- # Variables:
- newModeVar TeX boxMacroName {BoxedEPSF} 0
- newModeVar TeX funcExpr {\\((sub)*section|chapter)(\[.*\]|\*)?{([^{}]*)}} 0
- newModeVar TeX funcExprAlt {\\(section|chapter)(\[.*\]|\*)?{([^{}]*)}} 0
- newModeVar TeX prefixString {% } 0
- newModeVar TeX wordBreak {(\\)?[a-zA-Z0-9]+} 0
- newModeVar TeX wordBreakPreface {([^a-zA-Z0-9\\]|.\\)} 0
-
- #--------------------------------------------------------------------------
- # Mark Menu:
- #--------------------------------------------------------------------------
-
- proc TeXMarkFile {} {
- set end [maxPos]
- set pos 0
- set l {}
-
- # Remove all previous marks in this file?
- set exp {\\((sub)*section|chapter)(\[.*\]|\*)?{([^{}]*)}}
- while {![catch {search -f 1 -r 1 -m 0 -i 0 $exp $pos} res]} {
- set start [lindex $res 0]
- set end [lindex $res 1]
- set text [getText $start $end]
- if {[regexp {\{(.*)\}} $text dummy mtch]} {
- set lab ""
- if {[regexp {(sub)*section} $text title]} then {
- append lab $l [format "%[expr [string length $title] - 7]\s" ""]
- } else {
- set l { }
- }
- append lab $mtch
- setNamedMark $lab [lineStart [expr $start - 1]] $start $start
- }
- set pos [expr $end+1]
- }
- }
-
- #--------------------------------------------------------------------------
- # Insertion routines:
- #--------------------------------------------------------------------------
-
- # Returns a modified text string if the string $text is non-null,
- # and the null string otherwise. The argument 'operation' is a
- # string directing 'doPrefixText' to either "insert" or "remove"
- # $prefixString to/from each line of $text. (This routine is
- # adapted from strings.tcl.)
- proc doPrefixText {operation prefixString text} {
- if {$text == ""} {return ""}
- set pref [quoteExpr $prefixString]
- if {$operation == "insert"} then {
- set trailChar ""
- set textLen [string length $text]
- if {[string index $text [expr $textLen-1]] == "\r"} then {
- set text [string range $text 0 [expr $textLen-2]]
- set trailChar "\r"
- }
- set str \r$prefixString
- regsub -all \r $text $str text
- return $prefixString$text$trailChar
- } elseif {$operation == "remove"} then {
- regsub -all \r$pref $text \r text
- regsub ^$pref $text "" text
- return $text
- }
- }
-
- # Shift each line of $text to the right by inserting a string of
- # $whitespace characters at the beginning of each line, returning
- # the resulting string.
- proc shiftTextRight {text whitespace} {
- return [doPrefixText "insert" $whitespace $text]
- }
-
- # Return a string of whitespace characters from the beginning
- # of the line containing $pos up to the first non-whitespace
- # character.
- proc getIndentation {pos} {
- set text [getText [lineStart $pos] [nextLineStart $pos]]
- regexp {^[ \t]*} $text theIndentation
- return $theIndentation
- }
-
- # Return an "indented carriage return" if any character preceding
- # the insertion point (on the same line) is a non-whitespace
- # character. Otherwise, return the null string.
- proc openingCarriageReturn {} {
- set pos [getPos]
- set end $pos
- set start [lineStart $pos]
- set text [getText $start $end]
- if {[isWhitespace $text]} then {
- if {$start == $end} {return [getIndentation $pos]} {return ""}
- } else {
- return "\r[getIndentation $pos]"
- }
- }
- # Return an "indented carriage return" if any character following
- # the insertion point (on the same line) is a non-whitespace
- # character. Otherwise, return the null string.
- proc closingCarriageReturn {} {
- set pos [selEnd]
- if {[isSelection] && ($pos == [lineStart $pos])} then {
- return "\r"
- } else {
- set start $pos
- set end [nextLineStart $start]
- set text [getText $start $end]
- if {[isWhitespace $text]} then {
- return ""
- } else {
- return "\r[getIndentation $pos]"
- }
- }
- }
-
- # Insert an object at the insertion point. If there is a selection and the
- # global variable 'deleteObjectNoisily' is false, quietly delete the selection
- # first (just like 'paste'). Otherwise, prompt the user for the appropriate
- # action. Returns true if the object is ultimately inserted, and false if the
- # user cancels the operation.
- proc insertObject {objectName} {
- global deleteObjectNoisily
- if {[isSelection]} then {
- if {$deleteObjectNoisily} then {
- case [askyesno -c "Delete selection?"] in {
- "yes" {deleteText [getPos] [selEnd]}
- "no" {backwardChar}
- "cancel" {return 0}
- }
- } else {
- deleteText [getPos] [selEnd]
- }
- }
- insertText $objectName
- return 1
- }
-
- # Insert an object at the insertion point. If there is a selection, wrap
- # it inside the parameters $left and $right. Returns true if there is a
- # selection (in which case it will wrap), and false otherwise.
- proc wrapObject {left right} {
- set currentPos [getPos]
- set selected [isSelection]
- if {$selected} then {
- replaceText $currentPos [selEnd] $left [getSelect] $right
- } else {
- insertText $left "•" $right
- }
- goto $currentPos
- nextTabStop
- return $selected
- }
-
- # Builds and returns a LaTeX environment, that is, a \begin...\end
- # pair, given the name of the environment, an argument string,
- # and the environment body. The body should be passed to this
- # procedure fully formatted, including indentation.
- proc buildEnvironment {envName envArg envBody trailingComment} {
- set indent [getIndentation [getPos]]
- set envStr [openingCarriageReturn]
- append envStr "\\begin{" $envName "}"
- append envStr $envArg "\r"
- append envStr $envBody
- append envStr $indent "\\end{" $envName "}$trailingComment"
- append envStr [closingCarriageReturn]
- return $envStr
- }
-
- # Inserts a LaTeX environment with the specified name, argument,
- # and body at the insertion point. Positions the cursor at the
- # beginning of the environment, leaving any subsequent action to the
- # calling procedure. Deletes the current selection quietly if the
- # global variable 'deleteEnvironmentNoisily' is false; otherwise
- # the user is prompted for directions. Returns true if the
- # environment is ultimately inserted, and false if the user cancels
- # the operation.
- proc insertEnvironment {envName envArg envBody} {
- global deleteEnvironmentNoisily
- if {[isSelection]} then {
- if {$deleteEnvironmentNoisily} then {
- case [askyesno -c "Delete selection?"] in {
- "yes" {}
- "no" {backwardChar}
- "cancel" {return 0}
- }
- }
- }
- set start [getPos]
- set end [selEnd]
- set body [shiftTextRight $envBody [getIndentation $start]]
- replaceText $start $end [buildEnvironment $envName $envArg $body "•"]
- goto $start
- return 1
- }
-
- # Inserts an environment with the given name, argument, and body at
- # the insertion point. Positions the cursor at the beginning of
- # the environment, leaving any subsequent action to the calling
- # procedure. If there is currently a selection, cut and paste it
- # into the body of the new environment, maintaining proper
- # indentation; otherwise, insert a tab stop into the body of the
- # environment. Returns true if there is a selection, and false
- # otherwise.
- proc wrapEnvironment {envName envArg envBody} {
- set start [getPos]
- set end [selEnd]
- set indent [getIndentation $start]
- if {[isSelection]} then {
- set text [getSelect]
- set textLen [string length $text]
- if {[string index $text [expr $textLen-1]] != "\r"} then {
- append text "\r"
- }
- if {$start == [lineStart $start]} then {
- set body [shiftTextRight $text \t]
- } else {
- set body "$indent[shiftTextRight $text \t]"
- }
- append body [shiftTextRight $envBody $indent]
- set environment [buildEnvironment $envName $envArg $body "•"]
- set returnFlag 1
- } else {
- append body "$indent\t•\r" [shiftTextRight $envBody $indent]
- set environment [buildEnvironment $envName $envArg $body "•"]
- set returnFlag 0
- }
- replaceText $start $end $environment
- goto $start
- return $returnFlag
- }
-
- # A generic call to 'wrapEnvironment' used throughout latex.tcl:
- proc doWrapEnvironment {envName} {
- if {[wrapEnvironment $envName "" ""]} then {
- set msgText "selection wrapped"
- } else {
- set msgText "enter body of $envName environment"
- }
- nextTabStop
- message $msgText
- }
-
- # Inserts a structured document template at the insertion point.
- # Three arguments are required: the class name of the document, a
- # preamble string, and a string containing the body of the document.
- # If the preamble is null, a generic \usepackage statement is
- # inserted; otherwise, the preamble is inserted as is. This routine
- # does absolutely no error-checking (this is totally left up to the
- # calling procedure) and returns nothing.
- proc insertDocument {className preamble docBody} {
- set docStr "\\documentclass\[•\]{$className}\r"
- if {$preamble == ""} then {
- append docStr "\\usepackage{•}\r\r•\r\r"
- } else {
- append docStr $preamble
- }
- append docStr [buildEnvironment "document" "" $docBody "\r"]
- set start [getPos]
- set end [selEnd]
- replaceText $start $end $docStr
- goto $start
- return
- }
-
- # Inserts a document template at the insertion point given the
- # class name of the document to be inserted. If ALL of the current
- # document is selected, then the routine wraps the text inside a
- # generic document template. If the file is empty, a bullet is
- # inserted in place of the document body. If neither of these
- # conditions is true, an alert is displayed, and no action is taken.
- # Returns true if wrapping occurs, and false otherwise.
- proc wrapDocument {className} {
- if {[isEmptyFile]} then {
- append body "\r•\r\r"
- set returnFlag 0
- } else {
- if {[isDocumentSelected]} then {
- set text [getSelect]
- append body "\r$text\r"
- set returnFlag 1
- } else {
- alertnote "nonempty file: delete text or \'Select All\'\
- from the Edit menu"
- return 0
- }
- }
- set docStr "\\documentclass\[•\]{$className}\r"
- append docStr "\\usepackage{•}\r\r•\r\r"
- append docStr [buildEnvironment "document" "" $body "\r"]
- set start [getPos]
- set end [selEnd]
- replaceText $start $end $docStr
- goto $start
- nextTabStop
- message "enter style (or leave blank)"
- return $returnFlag
- }
-
- #--------------------------------------------------------------------------
- # Misc:
- #--------------------------------------------------------------------------
-
- # Checks to see if there's a current selection.
- proc isSelection {} {
- return [string length [getSelect]]
- }
-
- # Checks to see if the current window is empty, sans whitespace.
- proc isEmptyFile {} {
- return [isWhitespace [getText 0 [maxPos]]]
- }
-
- # If there is a selection, make sure it's uppercase. Otherwise,
- # check to see if the character after the insertion point is uppercase.
- proc isUppercase {} {
- if {[isSelection]} then {
- set text [getSelect]
- } else {
- set text [lookAt [getPos]]
- }
- return [expr {[string toupper $text] == $text}]
- }
-
- # Returns true if the entire window is selected, and false otherwise.
- proc isDocumentSelected {} {
- return [expr {([getPos] == 0) && ([selEnd] == [maxPos])}]
- }
-
- # Takes any string and tests whether or not that string contains all
- # whitespace characters. Carriage returns are considered whitespace,
- # as are spaces and tabs. Also returns true for the null string.
- proc isWhitespace {anyString} {
- set len [string length $anyString]
- for {set i 0} {$i < $len} {incr i} {
- set c [string index $anyString $i]
- if {($c != "\ ") && ($c != "\t") && ($c != "\r")} then {return 0}
- }
- return 1
- }
-
- # Select the line containing the insertion point.
- proc lineSelect {} {
- goto [lineStart [getPos]]
- nextLineSelect
- }
-
- # Check to see if the LaTeX symbol package has been loaded; if not, ask
- # the user for directions. Returns false if the package is not loaded
- # AND the user cancels the operation; otherwise, returns true.
- proc isSymbolPackageLoaded {} {
- global searchNoisily
- set begPos [getPos]
- set endPos [selEnd]
- set searchString {\\usepackage\{.*latexsym.*\}}
- set searchResult [search -n -f 0 -m 0 -i 1 -r 1 $searchString $begPos]
- if {[llength $searchResult] == 0} then {
- case [askyesno -c "Insert the LaTeX symbol package?"] in {
- "yes" {
- set searchString {\\documentclass(\[.*\])?\{.*\}}
- set searchResult [search -n -f 0 -m 0 -i 1 -r 1 $searchString $begPos]
- if {[llength $searchResult] == 0} then {
- set returnVal 0
- if {$searchNoisily} {beep}
- message "can't find \\documentclass"
- } else {
- goto [lindex $searchResult 1]
- set txt "\r\\usepackage\{latexsym\}"
- set offset [string length $txt]
- set begPos [expr $begPos + $offset]
- set endPos [expr $endPos + $offset]
- insertText $txt
- set returnVal 1
- }
- }
- "no" {set returnVal 1}
- "cancel" {set returnVal 0}
- }
- } else {
- set returnVal 1
- }
- select $begPos $endPos
- return $returnVal
- }
-
-
- #############################################################################
- #
- # Basic Commands
- #
- #############################################################################
-
- proc typeset {} {
- global latexPath
-
- # Initialization:
- set isOzTeX 0
- set isTextures 0
- set isCMacTeX 0
-
- set currentWin [lindex [winNames -f] 0]
-
- # Check if a LaTeX app is running. If not, open the app named in
- # $latexPath (if defined) or have the user select an app via a
- # standard file dialog.
- set appName [checkRunningL LaTeX {OTEX *TEX *XeT} latexPath]
-
- if {[string match {OzTeX*} $appName]} {
- set isOzTeX 1
- } elseif {[string match {Textures*} $appName]} {
- set isTextures 1
- } elseif {[string match {*tex} $appName]} {
- set isCMacTeX 1
- } else {
- alertnote "Sorry, I don't know how to talk to \"$appName\"."
- return
- }
- if {[winInfo dirty]} {
- case [askyesno -c "Save \"$currentWin\"?"] in {
- "yes" {save}
- "no" {}
- "cancel" {return}
- }
- }
- switchTo $appName
- if {$isOzTeX} {
- sendOpenEvent -n $appName $currentWin
- } elseif {$isTextures} {
- sendOpenEvent -n $appName $currentWin
- } elseif {$isCMacTeX} {
- dosc -n $name -k 'aevt' -e 'odoc' -r -f $currentWin
- }
- }
- # Slightly modified version of 'checkRunning' that looks for any of a
- # list of running apps. (Courtesy of Tom Pollard)
- proc checkRunningL {prompt sigs path} {
- global $path
- foreach sig $sigs {
- foreach proc [processes] {
- if {[lindex $proc 1] == $sig} {
- return [lindex $proc 0]
- }
- }
- }
- if {![info exists $path] || ![file exists [set $path]]} {
- if {[addAppPath $prompt $path]} return
- }
- if {[catch {getFileSig [set $path]}]} {
- if {[addAppPath $prompt $path]} return
- }
- set sig [getFileSig [set $path]]
- if {[catch {launch -f [set $path]}]} {
- error "Problem with launching file (out of memory?)"
- }
- return [file tail [set $path]]
- # return [checkRunning $name $sig $path]
- }
-
-
- #--------------------------------------------------------------------------
- # Goto:
- #--------------------------------------------------------------------------
-
- # Switch to (but don't execute) any of the following applications.
- proc latex {} {
- global latexPath
- set sig ""
- catch {string trim [lindex [getfinfo $latexPath] 1] '} sig
- set name [checkRunning latex $sig latexPath]
- if {![string length $name]} return
- switchTo $name
- }
- proc bibtex {} {
- global bibtexPath
- set name [checkRunning BibTeX BIBt bibtexPath]
- if {![string length $name]} return
- switchTo $name
- }
- proc makeindex {} {
- global makeindexPath
- set name [checkRunning MakeIndex Midx makeindexPath]
- if {![string length $name]} return
- switchTo $name
- }
-
- proc nextSection {} {
- global searchNoisily funcExprAlt
- set searchString $funcExprAlt
- if {[isSelection]} then {
- set searchPos [expr [getPos]+1]
- } else {
- set searchPos [getPos]
- }
- set searchResult [search -f 1 -r 1 -n $searchString $searchPos]
- if {[string length $searchResult]} {
- select [lindex $searchResult 0] [lindex $searchResult 1]
- } else {
- if {$searchNoisily} {beep}
- message "next $funcExprAlt not found"
- }
- }
- proc prevSection {} {
- global searchNoisily funcExprAlt
- set searchString $funcExprAlt
- set searchResult [search -f 0 -r 1 -n $searchString [expr [getPos]-1]]
- if {[string length $searchResult]} {
- select [lindex $searchResult 0] [lindex $searchResult 1]
- } else {
- if {$searchNoisily} {beep}
- message "previous $funcExprAlt not found"
- }
- }
- proc nextSubsection {} {
- global searchNoisily funcExpr
- set searchString $funcExpr
- if {[isSelection]} then {
- set searchPos [expr [getPos]+1]
- } else {
- set searchPos [getPos]
- }
- set searchResult [search -f 1 -r 1 -n $searchString $searchPos]
- if {[string length $searchResult]} {
- select [lindex $searchResult 0] [lindex $searchResult 1]
- } else {
- if {$searchNoisily} {beep}
- message "next $funcExpr not found"
- }
- }
- proc prevSubsection {} {
- global searchNoisily funcExpr
- set searchString $funcExpr
- set searchResult [search -f 0 -r 1 -n $searchString [expr [getPos]-1]]
- if {[string length $searchResult]} {
- select [lindex $searchResult 0] [lindex $searchResult 1]
- } else {
- if {$searchNoisily} {beep}
- message "previous $funcExpr not found"
- }
- }
-
- proc gotoTabStop {directionIndicator} {
- set searchResult [search -n -f $directionIndicator -m 0 -i 1 -r 0 {•} [getPos]]
- if {[llength $searchResult] == 0} then {
- return 0
- } else {
- goto [lindex $searchResult 0]
- return 1
- }
- }
- proc nextTabStop {} {
- global searchNoisily
- set forward 1
- if {[gotoTabStop $forward]} then {
- deleteChar
- } else {
- if {$searchNoisily} {beep}
- message "tab stop not found"
- }
- }
- proc prevTabStop {} {
- global searchNoisily
- set forward 0
- if {[gotoTabStop $forward]} then {
- deleteChar
- } else {
- if {$searchNoisily} {beep}
- message "tab stop not found"
- }
- }
- proc nthTabStop {numTabStops} {
- global searchNoisily promptNoisily useStatusBar
- if {$numTabStops == 0} then {
- if {$promptNoisily && $useStatusBar} {beep}
- catch {sPrompt "How many tab stops?" "3"} numTabStops
- if {$numTabStops == "cancel"} then {
- return
- }
- }
- set currentPos [getPos]
- if {$numTabStops > 0} {set forward 1} {set forward 0}
- set maxits [expr abs($numTabStops)]
- if {![gotoTabStop $forward]} then {
- if {$searchNoisily} {beep}
- message "tab stop not found"
- goto $currentPos
- return
- }
- for {set i 1} {$i < $maxits} {incr i} {
- if {$forward} {forwardChar} {backwardChar}
- if {![gotoTabStop $forward]} then {
- if {$searchNoisily} {beep}
- message "tab stop not found"
- goto $currentPos
- return
- }
- }
- deleteChar
- }
-
- #--------------------------------------------------------------------------
- # Utilities:
- #--------------------------------------------------------------------------
-
- proc clearTabStops {} {
- global searchNoisily
- message "working..."
- set messageString "selection"
- if {[set start [getPos]] == [set end [selEnd]]} {
- set messageString "document"
- set start 0
- set end [maxPos]
- }
- set text [getText $start $end]
- if {[regsub -all {•} $text {} text]} then {
- replaceText $start $end $text
- set end [getPos]
- select $start $end
- message "tab stops removed from $messageString"
- } else {
- if {$searchNoisily} {beep}
- message "no tab stops found in $messageString"
- }
- }
-
- proc convertDollarSigns {} {
- global searchNoisily
- message "working..."
- set messageString "selection"
- if {[set start [getPos]] == [set end [selEnd]]} {
- set messageString "document"
- set start 0
- set end [maxPos]
- }
- set text [getText $start $end]
- # Convert all displaymath mode:
- set convert1 [regsub -all {\$\$([^$]*)\$\$} $text {\\[\1\\]} text]
- # Convert all math mode:
- set convert2 [regsub -all {\$([^$]*)\$} $text {\\(\1\\)} text]
- if {$convert1 || $convert2} then {
- replaceText $start $end $text
- message "$messageString converted to LaTeX math mode format"
- } else {
- if {$searchNoisily} {beep}
- message "no dollar signs found in $messageString"
- }
- }
-
- proc loadSymbolPackage {} {
- global searchNoisily
- set begPos [getPos]
- set endPos [selEnd]
- set searchString {\\usepackage\{.*latexsym.*\}}
- set searchResult [search -n -f 1 -m 0 -i 1 -r 1 $searchString 0]
- if {[llength $searchResult] == 0} then {
- set searchString {\\documentclass(\[.*\])?\{.*\}}
- set searchResult [search -n -f 1 -m 0 -i 1 -r 1 $searchString 0]
- if {[llength $searchResult] == 0} then {
- if {$searchNoisily} {beep}
- message "can't find \\documentclass"
- } else {
- goto [lindex $searchResult 1]
- set txt "\r\\usepackage\{latexsym\}"
- set offset [string length $txt]
- set begPos [expr $begPos + $offset]
- set endPos [expr $endPos + $offset]
- insertText $txt
- }
- } else {
- if {$searchNoisily} {beep}
- select $begPos $endPos
- message "symbol package already loaded"
- }
- }
-
-
- #############################################################################
- #
- # Paragraph Mode Macros
- #
- #############################################################################
-
- #--------------------------------------------------------------------------
- # Documents:
- #--------------------------------------------------------------------------
-
- proc letter {} {
- set preamble "\r\\address\{%\r"
- append preamble " • \\\\ % insert your name here\r"
- append preamble " • \\\\ % insert your address here\r"
- append preamble " • \\\\ % insert more address here\r"
- append preamble " • % insert city-state-zip here\r"
- append preamble "\}\r\r"
- append preamble "\\date\{•\} % optional\r"
- append preamble "\\signature\{•\}\r\r"
- set body "\r\\begin\{letter\}\{%\r"
- append body " • \\\\ % insert addressee's name here\r"
- append body " • \\\\ % insert addressee's address here\r"
- append body " • \\\\ % insert more address here\r"
- append body " • % insert addressee's city-state-zip here\r"
- append body "\}\r\r"
- append body "\\opening\{Dear •,\}\r\r"
- if {[isEmptyFile]} then {
- append body "% BODY OF LETTER\r"
- append body "•\r\r"
- } else {
- if {[isDocumentSelected]} then {
- set text [getSelect]
- # deleteText 0 [maxPos]
- append body "$text\r"
- } else {
- alertnote "nonempty file: delete text or \'Select All\'\
- from the Edit menu"
- return
- }
- }
- append body "\\closing\{Sincerely,\}\r\r"
- append body "\\encl\{•\}\r"
- append body "\\cc\{•\}\r\r"
- append body "\\end\{letter\}\r\r"
- insertDocument "letter" $preamble $body
- nextTabStop
- message "enter style (or leave blank)"
- }
- proc article {} {
- wrapDocument "article"
- }
- proc report {} {
- wrapDocument "report"
- }
- proc book {} {
- wrapDocument "book"
- }
- proc slides {} {
- wrapDocument "slides"
- }
- proc custom {} {
- catch {prompt "What documentclass?" "article"} documentType
- if {$documentType != "cancel"} then {
- wrapDocument "$documentType"
- }
- }
-
- proc getStyle {} {
- catch {prompt "Choose a style:" "11pt" "" "11pt" "12pt" "titlepage" \
- "twocolumn" "twoside" "a4paper" "leqno" "fleqn"} styleName
- if {$styleName != "cancel"} then {
- return $styleName
- } else {
- return ""
- }
- }
- proc insertStyle {style} {
- global searchNoisily
- set searchString {\\documentclass}
- set searchResult [search -n -f 1 -m 0 -i 1 -r 1 $searchString 0]
- if {[llength $searchResult] == 0} then {
- if {$searchNoisily} {beep}
- message "can\'t find \\documentclass"
- } else {
- set nextCharPos [lindex $searchResult 1]
- goto $nextCharPos
- set nextChar [lookAt $nextCharPos]
- if {$nextChar == "\["} then {
- forwardChar
- insertText $style
- if {[lookAt [getPos]] != "\]"} then {
- insertText ","
- }
- } elseif {$nextChar == "\{"} then {
- insertText "\[$style\]"
- } else {
- alertnote "unrecognizable \\documentclass statement"
- }
- }
- }
- proc styles {} {
- set style [getStyle]
- if {$style != ""} then {
- insertStyle $style
- }
- }
- proc getPackage {} {
- catch {prompt "Choose a package:" "latexsym" "" "amstex" "babel" \
- "color" "graphics" "ifthen" "latexsym" "makeidx" \
- "showidx"} packageName
- if {$packageName != "cancel"} then {
- return $packageName
- } else {
- return ""
- }
- }
- proc insertPackage {package} {
- global searchNoisily
- set searchString {\\documentclass(\[.*\])?\{.*\}}
- set searchResult [search -n -f 1 -m 0 -i 1 -r 1 $searchString 0]
- if {[llength $searchResult] == 0} then {
- if {$searchNoisily} {beep}
- message "can\'t find \\documentclass"
- } else {
- goto [lindex $searchResult 1]
- insertText "\r\\usepackage\{$package\}"
- }
- }
- proc packages {} {
- set package [getPackage]
- if {$package != ""} then {
- insertPackage $package
- }
- }
- proc filecontents {} {
- global searchNoisily
- set searchString {\\documentclass}
- set searchResult [search -n -f 1 -m 0 -i 1 -r 1 $searchString 0]
- if {[llength $searchResult] == 0} then {
- if {$searchNoisily} {beep}
- message "can\'t find \\documentclass"
- return
- } else {
- set prompt "File to be included:"
- if {[catch {getfile $prompt} path]} then {
- return
- } else {
- set fd [open $path]
- set text [read $fd]
- close $fd
- regsub -all {
- } $text \r text
- goto 0
- set envName "filecontents"
- set envArg "{[file tail $path]}"
- replaceText 0 0 [buildEnvironment $envName $envArg "$text\r" "\r\r"]
- goto 0
- message "file included"
- }
- }
- }
-
- #--------------------------------------------------------------------------
- # Page Layout:
- #--------------------------------------------------------------------------
-
- proc maketitle {} {
- global searchNoisily
- set searchString {\\document(class|style)(\[.*\])?\{.*\}}
- set searchResult [search -n -f 1 -m 0 -i 1 -r 1 $searchString 0]
- if {[llength $searchResult] == 0} then {
- if {$searchNoisily} {beep}
- message "can\'t find \\documentclass or \\documentstyle"
- } else {
- set searchPos [lindex $searchResult 1]
- set searchString {\\begin\{document\}}
- set searchResult [search -n -f 1 -m 0 -i 1 -r 1 $searchString $searchPos]
- if {[llength $searchResult] == 0} then {
- if {$searchNoisily} {beep}
- message "can\'t find \\begin\{document\}"
- } else {
- goto [lindex $searchResult 1]
- set currentPos [getPos]
- set txt "\r\r% Definition of title page:"
- append txt "\r\\title\{"
- append txt "\r\t•\r\}"
- append txt "\r\\author\{"
- append txt "\r\t•\t% insert author(s) here"
- append txt "\r\}"
- append txt "\r\\date\{•\}\t% optional"
- append txt "\r\r\\maketitle"
- insertText $txt
- goto $currentPos
- nextTabStop
- message "insert title"
- }
- }
- }
- proc abstract {} { doWrapEnvironment "abstract" }
- proc titlepage {} { doWrapEnvironment "titlepage" }
- proc getPagestyle {} {
- catch {prompt "Choose a pagestyle:" "plain" "" "plain" "empty" \
- "headings" "myheadings"} pagestyleName
- if {$pagestyleName != "cancel"} then {
- return $pagestyleName
- } else {
- return ""
- }
- }
- proc pagestyle {} {
- set pagestyleName [getPagestyle]
- if {$pagestyleName != ""} then {
- openingCarriageReturn
- insertObject "\\pagestyle\{$pagestyleName\}"
- closingCarriageReturn
- }
- }
- proc thispagestyle {} {
- set pagestyleName [getPagestyle]
- if {$pagestyleName != ""} then {
- openingCarriageReturn
- insertObject "\\thispagestyle\{$pagestyleName\}"
- closingCarriageReturn
- }
- }
- proc getPagenumberingStyle {} {
- catch {prompt "Choose a pagenumbering style:" "arabic" "" "arabic" \
- "roman" "Roman" "alph" "Alph"} pagenumberingStyle
- if {$pagenumberingStyle != "cancel"} then {
- return $pagenumberingStyle
- } else {
- return ""
- }
- }
- proc pagenumbering {} {
- set pagenumberingStyle [getPagenumberingStyle]
- if {$pagenumberingStyle != ""} then {
- openingCarriageReturn
- insertObject "\\pagenumbering\{$pagenumberingStyle\}"
- closingCarriageReturn
- }
- }
- proc twocolumn {} {
- openingCarriageReturn
- insertObject "\\twocolumn"
- closingCarriageReturn
- }
- proc onecolumn {} {
- openingCarriageReturn
- insertObject "\\onecolumn"
- closingCarriageReturn
- }
-
- #--------------------------------------------------------------------------
- # Sectioning:
- #--------------------------------------------------------------------------
-
- proc part {} {
- if {[wrapObject "\\part{" "}•"]} then {
- message "don't forget the label"
- } else {
- message "type the part name and don't forget the label"
- }
- }
- proc chapter {} {
- if {[wrapObject "\\chapter{" "}•"]} then {
- message "don't forget the label"
- } else {
- message "type the chapter name and don't forget the label"
- }
- }
- proc section {} {
- if {[wrapObject "\\section{" "}•"]} then {
- message "don't forget the label"
- } else {
- message "type the section name and don't forget the label"
- }
- }
- proc subsection {} {
- if {[wrapObject "\\subsection{" "}•"]} then {
- message "don't forget the label"
- } else {
- message "type the subsection name and don't forget the label"
- }
- }
- proc subsubsection {} {
- if {[wrapObject "\\subsubsection{" "}•"]} then {
- message "don't forget the label"
- } else {
- message "type the subsubsection name and don't forget the label"
- }
- }
- proc paragraph {} {
- if {[wrapObject "\\paragraph{" "}•"]} then {
- message "don't forget the label"
- } else {
- message "type the paragraph name and don't forget the label"
- }
- }
- proc subparagraph {} {
- if {[wrapObject "\\subparagraph{" "}•"]} then {
- message "don't forget the label"
- } else {
- message "type the subparagraph name and don't forget the label"
- }
- }
- proc appendix {} {insertObject "\\appendix"}
-
- #--------------------------------------------------------------------------
- # Text Style:
- #--------------------------------------------------------------------------
-
- proc emph {} {
- if {[wrapObject "\\emph{" "}•"]} then {
- message "selected text is emphasized"
- } else {
- message "enter text to be emphasized"
- }
- }
- proc textup {} {
- if {[wrapObject "\\textup{" "}•"]} then {
- message "selected text has upright shape"
- } else {
- message "enter text to have upright shape"
- }
- }
- proc textit {} {
- if {[wrapObject "\\textit{" "}•"]} then {
- message "selected text has italic shape"
- } else {
- message "enter text to have italic shape"
- }
- }
- proc textsl {} {
- if {[wrapObject "\\textsl{" "}•"]} then {
- message "selected text has slanted shape"
- } else {
- message "enter text to have slanted shape"
- }
- }
- proc textsc {} {
- if {[wrapObject "\\textsc{" "}•"]} then {
- message "selected text has small caps shape"
- } else {
- message "enter text to have small caps shape"
- }
- }
- proc textmd {} {
- if {[wrapObject "\\textmd{" "}•"]} then {
- message "selected text has been set in medium series"
- } else {
- message "enter text to be set in medium series"
- }
- }
- proc textbf {} {
- if {[wrapObject "\\textbf{" "}•"]} then {
- message "selected text has been set in bold series"
- } else {
- message "enter text to be set in bold series"
- }
- }
- proc textrm {} {
- if {[wrapObject "\\textrm{" "}•"]} then {
- message "selected text has been set with roman family"
- } else {
- message "enter text to be set using roman family"
- }
- }
- proc textsf {} {
- if {[wrapObject "\\textsf{" "}•"]} then {
- message "selected text has been set with sans serif family"
- } else {
- message "enter text to be set using sans serif family"
- }
- }
- proc texttt {} {
- if {[wrapObject "\\texttt{" "}•"]} then {
- message "selected text has been set with typewriter family"
- } else {
- message "enter text to be set using typewriter family"
- }
- }
- proc textnormal {} {
- if {[wrapObject "\\textnormal{" "}•"]} then {
- message "selected text has been set with normal style"
- } else {
- message "enter text to be set using normal style"
- }
- }
-
- #--------------------------------------------------------------------------
- # Text Size:
- #--------------------------------------------------------------------------
-
- proc tiny {} {
- if {[wrapObject "{\\tiny " "}•"]} then {
- message "tiny text set"
- } else {
- message "enter tiny text"
- }
- }
- proc scriptsize {} {
- if {[wrapObject "{\\scriptsize " "}•"]} then {
- message "scriptsize text set"
- } else {
- message "enter scriptsize text"
- }
- }
- proc footnotesize {} {
- if {[wrapObject "{\\footnotesize " "}•"]} then {
- message "footnotesize text set"
- } else {
- message "enter footnotesize text"
- }
- }
- proc small {} {
- if {[wrapObject "{\\small " "}•"]} then {
- message "small text set"
- } else {
- message "enter small text"
- }
- }
- proc normalsize {} {
- if {[wrapObject "{\\normalsize " "}•"]} then {
- message "normalsize text set"
- } else {
- message "enter normalsize text"
- }
- }
- proc large {} {
- if {[wrapObject "{\\large " "}•"]} then {
- message "large text set"
- } else {
- message "enter large text"
- }
- }
- proc Large {} {
- if {[wrapObject "{\\Large " "}•"]} then {
- message "Large text set"
- } else {
- message "enter Large text"
- }
- }
- proc LARGE {} {
- if {[wrapObject "{\\LARGE " "}•"]} then {
- message "LARGE text set"
- } else {
- message "enter LARGE text"
- }
- }
- proc huge {} {
- if {[wrapObject "{\\huge " "}•"]} then {
- message "huge text set"
- } else {
- message "enter huge text"
- }
- }
- proc Huge {} {
- if {[wrapObject "{\\Huge " "}•"]} then {
- message "Huge text set"
- } else {
- message "enter Huge text"
- }
- }
-
- #--------------------------------------------------------------------------
- # International:
- #--------------------------------------------------------------------------
-
- proc {ò} {} {
- if {[wrapObject "\\`{" "}•"]} then {
- message "accent set"
- } else {
- message "enter single character"
- }
- }
- proc {ó} {} {
- if {[wrapObject "\\'{" "}•"]} then {
- message "accent set"
- } else {
- message "enter single character"
- }
- }
- proc {ô} {} {
- if {[wrapObject "\\^{" "}•"]} then {
- message "accent set"
- } else {
- message "enter single character"
- }
- }
- proc {ö} {} {
- if {[wrapObject "\\\"{" "}•"]} then {
- message "accent set"
- } else {
- message "enter single character"
- }
- }
- proc {õ} {} {
- if {[wrapObject "\\~{" "}•"]} then {
- message "accent set"
- } else {
- message "enter single character"
- }
- }
- proc {ç} {} {
- if {[wrapObject "\\c{" "}•"]} then {
- message "accent set"
- } else {
- message "enter single character"
- }
- }
- proc {œ} {} {insertObject "\\oe"}
- proc {Œ} {} {insertObject "\\OE"}
- proc {æ} {} {insertObject "\\ae"}
- proc {Æ} {} {insertObject "\\AE"}
- proc {å} {} {insertObject "\\aa"}
- proc {Å} {} {insertObject "\\AA"}
- proc {ø} {} {insertObject "\\o"}
- proc {Ø} {} {insertObject "\\O"}
- proc {ß} {} {insertObject "\\ss"}
- proc {¿} {} {insertObject "?`"}
- proc {¡} {} {insertObject "!`"}
-
- #--------------------------------------------------------------------------
- # Environments:
- #--------------------------------------------------------------------------
-
- proc enumerate {} {
- global promptNoisily useStatusBar
- set envName "enumerate"
- if {$promptNoisily && $useStatusBar} {beep}
- catch {sPrompt "$envName: how many items?" 3} numberItems
- if {$numberItems != "cancel"} then {
- set body "\t\\item •"
- for {set i 1} {$i < $numberItems} {incr i} {
- append body "\r\r\t\\item •"
- }
- append body "\r"
- if {[insertEnvironment $envName "" $body]} then {
- nextTabStop
- message "type first item"
- }
- }
- }
- proc itemize {} {
- global promptNoisily useStatusBar
- set envName "itemize"
- if {$promptNoisily && $useStatusBar} {beep}
- catch {sPrompt "$envName: how many items?" 3} numberItems
- if {$numberItems != "cancel"} then {
- set body "\t\\item •"
- for {set i 1} {$i < $numberItems} {incr i} {
- append body "\r\r\t\\item •"
- }
- append body "\r"
- if {[insertEnvironment $envName "" $body]} then {
- nextTabStop
- message "type first item"
- }
- }
- }
- proc description {} {
- global promptNoisily useStatusBar
- set envName "description"
- if {$promptNoisily && $useStatusBar} {beep}
- catch {sPrompt "$envName: how many items?" 3} numberItems
- if {$numberItems != "cancel"} then {
- set body "\t\\item\[•\] •"
- for {set i 1} {$i < $numberItems} {incr i} {
- append body "\r\r\t\\item\[•\] •"
- }
- append body "\r"
- if {[insertEnvironment $envName "" $body]} then {
- nextTabStop
- message "type first item label"
- }
- }
- }
- proc thebibliography {} {
- global promptNoisily useStatusBar
- set envName "thebibliography"
- if {$promptNoisily && $useStatusBar} {beep}
- catch {sPrompt "$envName: how many bibitems?" 3} numberItems
- if {$numberItems != "cancel"} then {
- set arg "{99}"
- set body "\t\\bibitem{•}\r\t•"
- for {set i 1} {$i < $numberItems} {incr i} {
- append body "\r\r\t\\bibitem{•}\r\t•"
- }
- append body "\r"
- if {[insertEnvironment $envName $arg $body]} then {
- nextTabStop
- message "type first bibitem key"
- }
- }
- }
- proc slide {} { doWrapEnvironment "slide" }
- proc overlay {} { doWrapEnvironment "overlay" }
- proc note {} { doWrapEnvironment "titlepage" }
- proc figure {} {
- global useBoxMacro boxMacroName
- set envName "figure"
- set arg "\[tbp\]"
- if {$useBoxMacro} then {
- set body "\t\\centerline{\\$boxMacroName{•}}\r"
- }
- append body "\t\\caption{•}\r"
- append body "\t\\protect\\label{•}\r"
- if {$useBoxMacro} then {
- if {[insertEnvironment $envName $arg $body]} then {
- set msgText "enter filename"
- } else {
- return
- }
- } else {
- if {[wrapEnvironment $envName $arg $body]} then {
- set msgText "enter caption"
- } else {
- set msgText "enter body of $envName environment"
- }
- }
- nextTabStop
- message $msgText
- }
- proc table {} {
- set envName "table"
- set arg "\[tbp\]"
- append body "\t\\caption{•}\r"
- append body "\t\\protect\\label{•}\r"
- if {[wrapEnvironment $envName $arg $body]} then {
- set msgText "enter caption"
- } else {
- set msgText "enter body of $envName environment"
- }
- nextTabStop
- message $msgText
- }
- proc buildRow {jmax} {
- set txt "•"
- for {set j 1} {$j < $jmax} {incr j} {
- append txt " & •"
- }
- return $txt
- }
- proc tabular {} {
- global promptNoisily useStatusBar
- set envName "tabular"
- if {$promptNoisily && $useStatusBar} {beep}
- catch {sPrompt "$envName: how many rows?" 3} numberRows
- if {$numberRows != "cancel"} then {
- if {$promptNoisily && $useStatusBar} {beep}
- catch {sPrompt "$envName: how many columns?" 3} numberCols
- if {$numberCols != "cancel"} then {
- set arg "{|"
- for {set j 1} {$j <= $numberCols} {incr j} {
- append arg "c|"
- }
- append arg "}"
- set body "\t\\hline\r"
- for {set i 1} {$i <= $numberRows} {incr i} {
- append body "\t[buildRow $numberCols]"
- append body " \\\\\r\t\\hline\r"
- }
- if {[insertEnvironment $envName $arg $body]} then {
- nextTabStop
- message "type first item"
- }
- }
- }
- }
- proc verbatim {} { doWrapEnvironment "verbatim" }
- proc quote {} { doWrapEnvironment "quote" }
- proc quotation {} { doWrapEnvironment "quotation" }
- proc verse {} { doWrapEnvironment "verse" }
- proc flushleft {} { doWrapEnvironment "flushleft" }
- proc center {} { doWrapEnvironment "center" }
- proc flushright {} { doWrapEnvironment "flushright" }
- proc general {} {
- catch {prompt "What environment?" "center"} environmentName
- if {$environmentName != "cancel"} {
- doWrapEnvironment "$environmentName"
- }
- }
-
- #--------------------------------------------------------------------------
- # Boxes:
- #--------------------------------------------------------------------------
-
- proc mbox {} {
- if {[wrapObject "\\mbox{" "}•"]} then {
- message "mbox set"
- } else {
- message "enter text"
- }
- }
- proc makebox {} {
- if {[wrapObject "\\makebox\[•\]\[•\]{" "}•"]} then {
- message "makebox set; enter the width and position"
- } else {
- message "enter the width and position of the makebox, then the text"
- }
- }
- proc fbox {} {
- if {[wrapObject "\\fbox{" "}•"]} then {
- message "fbox set"
- } else {
- message "enter text"
- }
- }
- proc framebox {} {
- if {[wrapObject "\\framebox\[•\]\[•\]{" "}•"]} then {
- message "framebox set; enter the width and position"
- } else {
- message "enter the width and position of the framebox, then the text"
- }
- }
- proc newsavebox {} {
- if {[wrapObject "\\newsavebox{" "}•"]} then {
- message "newsavebox defined"
- } else {
- message "enter the command name of the sbox or savebox"
- }
- }
- proc sbox {} {
- if {[wrapObject "\\sbox{•}{" "}•"]} then {
- message "sbox set; enter the command name"
- } else {
- message "enter the command name of the sbox, then the text"
- }
- }
- proc savebox {} {
- if {[wrapObject "\\savebox{•}\[•\]\[•\]{" "}•"]} then {
- message "savebox set; enter the command name"
- } else {
- message "enter the command name of the savebox"
- }
- }
- proc usebox {} {
- if {[wrapObject "\\usebox{" "}•"]} then {
- message "usebox declared"
- } else {
- message "enter the command name of the sbox or savebox"
- }
- }
- proc raisebox {} {
- if {[wrapObject "\\raisebox{•}\[•\]\[•\]{" "}•"]} then {
- message "raisebox set; enter the displacement"
- } else {
- message "enter the displacement of the raisebox"
- }
- }
- proc parbox {} {
- if {[wrapObject "\\parbox\[•\]\{•\}{" "}•"]} then {
- message "parbox set; enter the position and width"
- } else {
- message "enter the position and width of the parbox, then the text"
- }
- }
- proc minipage {} {
- set arg "\[•\]{•}"
- wrapEnvironment "minipage" $arg ""
- nextTabStop
- message "enter the position of the minipage, then the width"
- }
- proc rule {} {
- insertObject "\\rule\[•\]\{•\}{•}•"
- nthTabStop -4
- message "enter the displacement of the rule, then width and height"
- }
-
- #--------------------------------------------------------------------------
- # Misc:
- #--------------------------------------------------------------------------
-
- proc ldots {} {insertObject "\\ldots"}
- proc {en-dash} {} {insertObject "--"}
- proc {em-dash} {} {insertObject "---"}
- proc texLogo {} {insertObject "\\TeX"}
- proc latexLogo {} {insertObject "\\LaTeX"}
- proc latex2eLogo {} {insertObject "\\LaTeXe"}
- proc today {} {insertObject "\\today"}
- proc dag {} {insertObject "\\dag"}
- proc ddag {} {insertObject "\\ddag"}
- proc sectionMark {} {insertObject "\\S"}
- proc paragraphMark {} {insertObject "\\P"}
- proc copyright {} {insertObject "\\copyright"}
- proc pounds {} {insertObject "\\pounds"}
- proc quotes {} {
- if {[wrapObject "`" "'•"]} then {
- message "text quoted"
- } else {
- message "enter text"
- }
- }
- proc dblQuotes {} {
- if {[wrapObject "``" "''•"]} then {
- message "text double quoted"
- } else {
- message "enter text"
- }
- }
- proc marginalNote {} {
- if {[wrapObject "\\marginpar{" "}•"]} then {
- message "marginal note set"
- } else {
- message "enter marginal note"
- }
- }
- proc footnote {} {
- if {[wrapObject "\\footnote{" "}•"]} then {
- message "footnote set"
- } else {
- message "enter footnote"
- }
- }
- proc label {} {
- if {[wrapObject "\\label{" "}•"]} then {
- message "label defined"
- } else {
- message "enter label"
- }
- }
- proc ref {} {
- if {[wrapObject "\\ref{" "}•"]} then {
- message "cross-reference made"
- } else {
- message "enter cross-reference"
- }
- }
- proc pageref {} {
- if {[wrapObject "\\pageref{" "}•"]} then {
- message "page reference made"
- } else {
- message "enter page reference"
- }
- }
- proc cite {} {
- if {[wrapObject "\\cite{" "}•"]} then {
- message "citation made"
- } else {
- message "enter citation"
- }
- }
- proc item {} {insertObject "\\item"}
- proc bibitem {} {
- if {[wrapObject "\\bibitem{" "}•"]} then {
- message "bibitem set"
- } else {
- message "enter bibitem"
- }
- }
-
-
- #############################################################################
- #
- # Math Mode Macros
- #
- #############################################################################
-
- #--------------------------------------------------------------------------
- # Math Modes:
- #--------------------------------------------------------------------------
-
- proc texMath {} {
- if {[wrapObject "$" "$•"]} then {
- message "formula set"
- } else {
- message "enter formula"
- }
- }
- proc texDisplaymath {} {
- if {[wrapObject "$$" "$$•"]} then {
- message "displayed formula set"
- } else {
- message "enter displayed formula"
- }
- }
- proc latexMath {} {
- if {[wrapObject "\\( " " \\)•"]} then {
- message "formula set"
- } else {
- message "enter formula"
- }
- }
- proc latexDisplaymath {} {
- if {[wrapObject "\\\[ " " \\\]•"]} then {
- message "displayed formula set"
- } else {
- message "enter displayed formula"
- }
- }
-
- #--------------------------------------------------------------------------
- # Math Style:
- #--------------------------------------------------------------------------
-
- proc mathit {} {
- if {[wrapObject "\\mathit{" "}•"]} then {
- message "selected text is math italic"
- } else {
- message "enter text to be math italic"
- }
- }
- proc mathrm {} {
- if {[wrapObject "\\mathrm{" "}•"]} then {
- message "selected text is math roman"
- } else {
- message "enter text to be math roman"
- }
- }
- proc mathbf {} {
- if {[wrapObject "\\mathbf{" "}•"]} then {
- message "selected text is math bold"
- } else {
- message "enter text to be math bold"
- }
- }
- proc mathsf {} {
- if {[wrapObject "\\mathsf{" "}•"]} then {
- message "selected text is math sans serif"
- } else {
- message "enter text to be math sans serif"
- }
- }
- proc mathtt {} {
- if {[wrapObject "\\mathtt{" "}•"]} then {
- message "selected text is math typewriter"
- } else {
- message "enter text to be math typewriter"
- }
- }
- proc mathcal {} {
- # Allow upper-case arguments only:
- if {[isSelection] && ![isUppercase]} then {
- alertnote "argument to \\mathcal must be uppercase"
- return
- }
- if {[wrapObject "\\mathcal{" "}•"]} then {
- message "selected text is calligraphic"
- } else {
- message "enter text to be calligraphic (UPPERCASE letters only)"
- }
- }
- proc displaystyle {} {
- if {[wrapObject "{\\displaystyle " "}•"]} then {
- message "displaystyle set"
- } else {
- message "enter displaystyle text"
- }
- }
- proc textstyle {} {
- if {[wrapObject "{\\textstyle " "}•"]} then {
- message "textstyle set"
- } else {
- message "enter textstyle text"
- }
- }
- proc scriptstyle {} {
- if {[wrapObject "{\\scriptstyle " "}•"]} then {
- message "scriptstyle set"
- } else {
- message "enter scriptstyle text"
- }
- }
- proc scriptscriptstyle {} {
- if {[wrapObject "{\\scriptscriptstyle " "}•"]} then {
- message "scriptscriptstyle set"
- } else {
- message "enter scriptscriptstyle text"
- }
- }
-
- #--------------------------------------------------------------------------
- # Math Environments:
- #--------------------------------------------------------------------------
-
- proc math {} { doWrapEnvironment "math" }
- proc displaymath {} { doWrapEnvironment "displaymath" }
- proc equation {} {
- set envName "equation"
- set body "\t\\label{•}\r"
- if {[wrapEnvironment $envName "" $body]} then {
- set msgText "equation wrapped"
- } else {
- set msgText "enter equation"
- }
- nextTabStop
- message $msgText
- }
- proc myArray {} {
- global promptNoisily useStatusBar
- set envName "array"
- if {$promptNoisily && $useStatusBar} {beep}
- catch {sPrompt "$envName: how many rows?" 3} numberRows
- if {$numberRows != "cancel"} then {
- if {$promptNoisily && $useStatusBar} {beep}
- catch {sPrompt "$envName: how many columns?" 3} numberCols
- if {$numberCols != "cancel"} then {
- set arg "{"
- for {set j 1} {$j <= $numberCols} {incr j} {
- append arg "c"
- }
- append arg "}"
- set row "\t[buildRow $numberCols]"
- for {set i 1} {$i < $numberRows} {incr i} {
- append body $row
- append body " \\\\\r\t\r"
- }
- append body $row
- append body "\r"
- if {[insertEnvironment $envName $arg $body]} then {
- nextTabStop
- message "type first item"
- }
- }
- }
- }
- proc eqnarrayStar {} {
- global promptNoisily useStatusBar
- set envName "eqnarray*"
- if {$promptNoisily && $useStatusBar} {beep}
- catch {sPrompt "$envName: how many rows?" 3} numberRows
- if {$numberRows != "cancel"} then {
- set row "\t[buildRow 3]"
- for {set i 1} {$i < $numberRows} {incr i} {
- append body $row
- append body " \\\\\r"
- }
- append body $row
- append body "\r"
- if {[insertEnvironment $envName "" $body]} then {
- nextTabStop
- message "type first item"
- }
- }
- }
- proc eqnarray {} {
- global promptNoisily useStatusBar
- set envName "eqnarray"
- if {$promptNoisily && $useStatusBar} {beep}
- catch {sPrompt "$envName: how many rows?" 3} numberRows
- if {$numberRows != "cancel"} then {
- set row "\t[buildRow 3]\r\t\\label{•}"
- for {set i 1} {$i < $numberRows} {incr i} {
- append body $row
- append body " \\\\\r"
- }
- append body $row
- append body "\r"
- if {[insertEnvironment $envName "" $body]} then {
- nextTabStop
- message "type first item"
- }
- }
- }
-
- #--------------------------------------------------------------------------
- # Formulas:
- #--------------------------------------------------------------------------
-
- proc subscript {} {
- if {[wrapObject "_{" "}•"]} then {
- message "subscript set"
- } else {
- message "enter subscript"
- }
- }
- proc superscript {} {
- if {[wrapObject "^{" "}•"]} then {
- message "superscript set"
- } else {
- message "enter superscript"
- }
- }
- proc fraction {} {
- set currentPos [getPos]
- if {[isSelection]} then {
- set selection [getSelect]
- set args [split $selection /]
- set len [llength $args]
- deleteText $currentPos [selEnd]
- if {$len == 1} then {
- insertText "\\frac{" $selection "}{•}•"
- goto $currentPos
- nextTabStop
- message "enter denominator"
- } else {
- set firstArg [lindex $args 0]
- set restArgs [lrange $args 1 [expr $len-1]]
- insertText "\\frac{" $firstArg "}{" [join $restArgs /] "}"
- if {$len > 2} {message "beware of multiple /"}
- }
- } else {
- insertText "\\frac{•}{•}•"
- goto $currentPos
- nextTabStop
- message "enter numerator"
- }
- }
- proc squareRoot {} {
- if {[wrapObject "\\sqrt{" "}•"]} then {
- message "square root set"
- } else {
- message "enter formula"
- }
- }
- proc nthRoot {} {
- if {[wrapObject "\\sqrt\[•\]{" "}•"]} then {
- message "enter root"
- } else {
- message "enter root, then formula"
- }
- }
- proc oneParameter {} {
- catch {prompt "Command name?" "sqrt"} commandName
- if {$commandName != "cancel"} {wrapObject "\\$commandName{" "}•"}
- }
- proc twoParameters {} {
- catch {prompt "Command name?" "frac"} commandName
- if {$commandName != "cancel"} then {
- set currentPos [getPos]
- if {[insertObject "\\$commandName{•}{•}•"]} then {
- goto $currentPos
- nextTabStop
- }
- }
- }
-
- #--------------------------------------------------------------------------
- # Greek:
- #--------------------------------------------------------------------------
-
- proc alpha {} {insertObject "\\alpha"}
- proc beta {} {insertObject "\\beta"}
- proc gamma {} {insertObject "\\gamma"}
- proc delta {} {insertObject "\\delta"}
- proc epsilon {} {insertObject "\\epsilon"}
- proc zeta {} {insertObject "\\zeta"}
- proc eta {} {insertObject "\\eta"}
- proc theta {} {insertObject "\\theta"}
- proc iota {} {insertObject "\\iota"}
- proc kappa {} {insertObject "\\kappa"}
- proc lambda {} {insertObject "\\lambda"}
- proc mu {} {insertObject "\\mu"}
- proc nu {} {insertObject "\\nu"}
- proc xi {} {insertObject "\\xi"}
- proc omicron {} {insertObject "o"}
- proc pi {} {insertObject "\\pi"}
- proc rho {} {insertObject "\\rho"}
- proc sigma {} {insertObject "\\sigma"}
- proc tau {} {insertObject "\\tau"}
- proc upsilon {} {insertObject "\\upsilon"}
- proc phi {} {insertObject "\\phi"}
- proc chi {} {insertObject "\\chi"}
- proc psi {} {insertObject "\\psi"}
- proc omega {} {insertObject "\\omega"}
-
- proc Gamma {} {insertObject "\\Gamma"}
- proc Delta {} {insertObject "\\Delta"}
- proc Theta {} {insertObject "\\Theta"}
- proc Lambda {} {insertObject "\\Lambda"}
- proc Xi {} {insertObject "\\Xi"}
- proc Pi {} {insertObject "\\Pi"}
- proc Sigma {} {insertObject "\\Sigma"}
- proc Upsilon {} {insertObject "\\Upsilon"}
- proc Phi {} {insertObject "\\Phi"}
- proc Psi {} {insertObject "\\Psi"}
- proc Omega {} {insertObject "\\Omega"}
-
- proc varepsilon {} {insertObject "\\varepsilon"}
- proc vartheta {} {insertObject "\\vartheta"}
- proc varpi {} {insertObject "\\varpi"}
- proc varrho {} {insertObject "\\varrho"}
- proc varsigma {} {insertObject "\\varsigma"}
- proc varphi {} {insertObject "\\varphi"}
-
- #--------------------------------------------------------------------------
- # Binary Ops:
- #--------------------------------------------------------------------------
-
- proc pm {} {insertObject "\\pm"}
- proc mp {} {insertObject "\\mp"}
- proc times {} {insertObject "\\times"}
- proc div {} {insertObject "\\div"}
- proc ast {} {insertObject "\\ast"}
- proc star {} {insertObject "\\star"}
- proc circ {} {insertObject "\\circ"}
- proc bullet {} {insertObject "\\bullet"}
- proc cdot {} {insertObject "\\cdot"}
- proc cap {} {insertObject "\\cap"}
- proc cup {} {insertObject "\\cup"}
- proc uplus {} {insertObject "\\uplus"}
- proc sqcap {} {insertObject "\\sqcap"}
- proc sqcup {} {insertObject "\\sqcup"}
- proc vee {} {insertObject "\\vee"}
- proc wedge {} {insertObject "\\wedge"}
- proc setminus {} {insertObject "\\setminus"}
- proc wr {} {insertObject "\\wr"}
- proc diamond {} {insertObject "\\diamond"}
- proc bigtriangleup {} {insertObject "\\bigtriangleup"}
- proc bigtriangledown {} {insertObject "\\bigtriangledown"}
- proc triangleleft {} {insertObject "\\triangleleft"}
- proc triangleright {} {insertObject "\\triangleright"}
- proc lhd {} { if {[isSymbolPackageLoaded]} then {insertObject "\\lhd"} }
- proc rhd {} { if {[isSymbolPackageLoaded]} then {insertObject "\\rhd"} }
- proc unlhd {} { if {[isSymbolPackageLoaded]} then {insertObject "\\unlhd"} }
- proc unrhd {} { if {[isSymbolPackageLoaded]} then {insertObject "\\unrhd"} }
- proc oplus {} {insertObject "\\oplus"}
- proc ominus {} {insertObject "\\ominus"}
- proc otimes {} {insertObject "\\otimes"}
- proc oslash {} {insertObject "\\oslash"}
- proc odot {} {insertObject "\\odot"}
- proc bigcirc {} {insertObject "\\bigcirc"}
- proc dagger {} {insertObject "\\dagger"}
- proc ddagger {} {insertObject "\\ddagger"}
- proc amalg {} {insertObject "\\amalg"}
-
- #--------------------------------------------------------------------------
- # Relations:
- #--------------------------------------------------------------------------
-
- proc leq {} {insertObject "\\leq"}
- proc prec {} {insertObject "\\prec"}
- proc preceq {} {insertObject "\\preceq"}
- proc myLl {} {insertObject "\\ll"}
- proc subset {} {insertObject "\\subset"}
- proc subseteq {} {insertObject "\\subseteq"}
- proc sqsubset {} {
- if {[isSymbolPackageLoaded]} then {insertObject "\\sqsubset"}
- }
- proc sqsubseteq {} {insertObject "\\sqsubseteq"}
- proc in {} {insertObject "\\in"}
- proc vdash {} {insertObject "\\vdash"}
-
- proc geq {} {insertObject "\\geq"}
- proc succ {} {insertObject "\\succ"}
- proc succeq {} {insertObject "\\succeq"}
- proc gg {} {insertObject "\\gg"}
- proc supset {} {insertObject "\\supset"}
- proc supseteq {} {insertObject "\\supseteq"}
- proc sqsupset {} {
- if {[isSymbolPackageLoaded]} then {insertObject "\\sqsupset"}
- }
- proc sqsupseteq {} {insertObject "\\sqsupseteq"}
- proc ni {} {insertObject "\\ni"}
- proc dashv {} {insertObject "\\dashv"}
-
- proc equiv {} {insertObject "\\equiv"}
- proc sim {} {insertObject "\\sim"}
- proc simeq {} {insertObject "\\simeq"}
- proc asymp {} {insertObject "\\asymp"}
- proc approx {} {insertObject "\\approx"}
- proc cong {} {insertObject "\\cong"}
- proc neq {} {insertObject "\\neq"}
- proc doteq {} {insertObject "\\doteq"}
- proc propto {} {insertObject "\\propto"}
-
- proc models {} {insertObject "\\models"}
- proc perp {} {insertObject "\\perp"}
- proc mid {} {insertObject "\\mid"}
- proc parallel {} {insertObject "\\parallel"}
- proc bowtie {} {insertObject "\\bowtie"}
- proc myJoin {} { if {[isSymbolPackageLoaded]} then {insertObject "\\join"} }
- proc smile {} {insertObject "\\smile"}
- proc frown {} {insertObject "\\frown"}
-
- #--------------------------------------------------------------------------
- # Arrows:
- #--------------------------------------------------------------------------
-
- proc leftarrow {} {insertObject "\\leftarrow"}
- proc Leftarrow {} {insertObject "\\Leftarrow"}
- proc rightarrow {} {insertObject "\\rightarrow"}
- proc Rightarrow {} {insertObject "\\Rightarrow"}
- proc leftrightarrow {} {insertObject "\\leftrightarrow"}
- proc Leftrightarrow {} {insertObject "\\Leftrightarrow"}
- proc mapsto {} {insertObject "\\mapsto"}
- proc hookleftarrow {} {insertObject "\\hookleftarrow"}
- proc leftharpoonup {} {insertObject "\\leftharpoonup"}
- proc leftharpoondown {} {insertObject "\\leftharpoondown"}
- proc rightleftharpoons {} {insertObject "\\rightleftharpoons"}
-
- proc longleftarrow {} {insertObject "\\longleftarrow"}
- proc Longleftarrow {} {insertObject "\\Longleftarrow"}
- proc longrightarrow {} {insertObject "\\longrightarrow"}
- proc Longrightarrow {} {insertObject "\\Longrightarrow"}
- proc longleftrightarrow {} {insertObject "\\longleftrightarrow"}
- proc Longleftrightarrow {} {insertObject "\\Longleftrightarrow"}
- proc longmapsto {} {insertObject "\\longmapsto"}
- proc hookrightarrow {} {insertObject "\\hookrightarrow"}
- proc rightharpoonup {} {insertObject "\\rightharpoonup"}
- proc rightharpoondown {} {insertObject "\\rightharpoondown"}
- proc leadsto {} {
- if {[isSymbolPackageLoaded]} then {insertObject "\\leadsto"}
- }
- proc uparrow {} {insertObject "\\uparrow"}
- proc Uparrow {} {insertObject "\\Uparrow"}
- proc downarrow {} {insertObject "\\downarrow"}
- proc Downarrow {} {insertObject "\\Downarrow"}
- proc updownarrow {} {insertObject "\\updownarrow"}
- proc Updownarrow {} {insertObject "\\Updownarrow"}
- proc nearrow {} {insertObject "\\nearrow"}
- proc searrow {} {insertObject "\\searrow"}
- proc swarrow {} {insertObject "\\swarrow"}
- proc nwarrow {} {insertObject "\\nwarrow"}
-
- #--------------------------------------------------------------------------
- # Dots:
- #--------------------------------------------------------------------------
-
- proc cdots {} {insertObject "\\cdots"}
- proc vdots {} {insertObject "\\vdots"}
- proc ddots {} {insertObject "\\ddots"}
-
- #--------------------------------------------------------------------------
- # Symbols:
- #--------------------------------------------------------------------------
-
- proc aleph {} {insertObject "\\aleph"}
- proc hbar {} {insertObject "\\hbar"}
- proc imath {} {insertObject "\\imath"}
- proc jmath {} {insertObject "\\jmath"}
- proc ell {} {insertObject "\\ell"}
- proc wp {} {insertObject "\\wp"}
- proc Re {} {insertObject "\\Re"}
- proc Im {} {insertObject "\\Im"}
- proc mho {} { if {[isSymbolPackageLoaded]} then {insertObject "\\mho"} }
- proc prime {} {insertObject "\\prime"}
- proc emptyset {} {insertObject "\\emptyset"}
- proc nabla {} {insertObject "\\nabla"}
- proc surd {} {insertObject "\\surd"}
- proc top {} {insertObject "\\top"}
- proc bot {} {insertObject "\\bot"}
- # proc | {} {insertObject "\\|"}
- proc angle {} {insertObject "\\angle"}
- proc forall {} {insertObject "\\forall"}
- proc exists {} {insertObject "\\exists"}
- proc neg {} {insertObject "\\neg"}
- proc flat {} {insertObject "\\flat"}
- proc natural {} {insertObject "\\natural"}
- proc sharp {} {insertObject "\\sharp"}
- proc backslash {} {insertObject "\\backslash"}
- proc partial {} {insertObject "\\partial"}
- proc infty {} {insertObject "\\infty"}
- proc Box {} { if {[isSymbolPackageLoaded]} then {insertObject "\\Box"} }
- proc Diamond {} {
- if {[isSymbolPackageLoaded]} then {insertObject "\\Diamond"}
- }
- proc triangle {} {insertObject "\\triangle"}
- proc clubsuit {} {insertObject "\\clubsuit"}
- proc diamondsuit {} {insertObject "\\diamondsuit"}
- proc heartsuit {} {insertObject "\\heartsuit"}
- proc spadesuit {} {insertObject "\\spadesuit"}
-
- #--------------------------------------------------------------------------
- # Functions:
- #--------------------------------------------------------------------------
-
- proc arccos {} {insertObject "\\arccos"}
- proc arcsin {} {insertObject "\\arcsin"}
- proc arctan {} {insertObject "\\arctan"}
- proc arg {} {insertObject "\\arg"}
- proc cos {} {insertObject "\\cos"}
- proc cosh {} {insertObject "\\cosh"}
- proc cot {} {insertObject "\\cot"}
- proc coth {} {insertObject "\\coth"}
- proc csc {} {insertObject "\\csc"}
- proc deg {} {insertObject "\\deg"}
- proc det {} {insertObject "\\det"}
- proc dim {} {insertObject "\\dim"}
- proc exp {} {insertObject "\\exp"}
- proc gcd {} {insertObject "\\gcd"}
- proc hom {} {insertObject "\\hom"}
- proc inf {} {insertObject "\\inf"}
- proc ker {} {insertObject "\\ker"}
- proc lg {} {insertObject "\\lg"}
- proc lim {} {insertObject "\\lim"}
- proc liminf {} {insertObject "\\liminf"}
- proc limsup {} {insertObject "\\limsup"}
- proc ln {} {insertObject "\\ln"}
- proc log {} {insertObject "\\log"}
- proc max {} {insertObject "\\max"}
- proc min {} {insertObject "\\min"}
- proc Pr {} {insertObject "\\Pr"}
- proc sec {} {insertObject "\\sec"}
- proc sin {} {insertObject "\\sin"}
- proc sinh {} {insertObject "\\sinh"}
- proc sup {} {insertObject "\\sup"}
- proc tan {} {insertObject "\\tan"}
- proc tanh {} {insertObject "\\tanh"}
-
- proc bmod {} {insertObject "\\bmod"}
- proc pmod {} {
- if {[wrapObject "\\pmod{" "}•"]} then {
- message "parenthesized mod set"
- } else {
- message "enter formula"
- }
- }
-
- #--------------------------------------------------------------------------
- # Large Ops:
- #--------------------------------------------------------------------------
-
- proc insertLargeOp {commandName} {
- set currentPos [getPos]
- insertText "\\$commandName"
- insertText "_{•}^{•}•"
- goto $currentPos
- nextTabStop
- }
- proc sum {} {insertLargeOp "sum"}
- proc prod {} {insertLargeOp "prod"}
- proc coprod {} {insertLargeOp "coprod"}
- proc int {} {insertLargeOp "int"}
- proc oint {} {insertLargeOp "oint"}
- proc bigcap {} {insertLargeOp "bigcap"}
- proc bigcup {} {insertLargeOp "bigcup"}
- proc bigsqcap {} {insertLargeOp "bigsqcap"}
- proc bigsqcup {} {insertLargeOp "bigsqcup"}
- proc bigvee {} {insertLargeOp "bigvee"}
- proc bigwedge {} {insertLargeOp "bigwedge"}
- proc bigodot {} {insertLargeOp "bigodot"}
- proc bigotimes {} {insertLargeOp "bigotimes"}
- proc bigoplus {} {insertLargeOp "bigoplus"}
- proc biguplus {} {insertLargeOp "biguplus"}
-
- #--------------------------------------------------------------------------
- # Delimiters:
- #--------------------------------------------------------------------------
-
- proc delimitObject {leftDelim rightDelim} {
- if {[wrapObject $leftDelim $rightDelim]} then {
- message "formula delimited"
- } else {
- message "enter formula"
- }
- }
- proc parentheses {} { delimitObject "(" ")•" }
- proc brackets {} { delimitObject "\[" "\]•" }
- proc braces {} { delimitObject "\\\{" "\\\}•" }
- proc absoluteValue {} { delimitObject "|" "|•" }
- proc getDelims {} {
- catch {prompt "Choose delimiters:" "parentheses" "" "parentheses" \
- "brackets" "braces" "angle brackets" "vertical bars" \
- "double bars" "ceiling" "floor"} delimType
- if {$delimType != "cancel"} then {
- case $delimType in {
- "parentheses" {
- set leftDelim "("
- set rightDelim ")"
- }
- "brackets" {
- set leftDelim "\["
- set rightDelim "\]"
- }
- "braces" {
- set leftDelim "\\\{"
- set rightDelim "\\\}"
- }
- "{vertical bars}" {
- set leftDelim "|"
- set rightDelim "|"
- }
- "{double bars}" {
- set leftDelim "\\|"
- set rightDelim "\\|"
- }
- "{angle brackets}" {
- set leftDelim "\\langle"
- set rightDelim "\\rangle"
- }
- "ceiling" {
- set leftDelim "\\lceil"
- set rightDelim "\\rceil"
- }
- "floor" {
- set leftDelim "\\lfloor"
- set rightDelim "\\rfloor"
- }
- default {
- alertnote "\"$delimType\" not recognized"
- return ""
- }
- }
- return [list $leftDelim $rightDelim]
- } else {return ""}
- }
- proc otherDelims {} {
- set delims [getDelims]
- if {$delims != ""} then {
- set leftDelim [lindex $delims 0]
- set rightDelim [lindex $delims 1]
- delimitObject "$leftDelim" "$rightDelim•"
- }
- }
- proc {half-openInterval} {} { delimitObject "(" "\]•" }
- proc {half-closedInterval} {} { delimitObject "\[" ")•" }
- proc bigParentheses {} { delimitObject "\\left(" "\\right)•" }
- proc bigBrackets {} { delimitObject "\\left\[" "\\right\]•" }
- proc bigBraces {} { delimitObject "\\left\\\{" "\\right\\\}•" }
- proc bigAbsoluteValue {} { delimitObject "\\left|" "\\right|•" }
- proc otherBigDelims {} {
- set delims [getDelims]
- if {$delims != ""} then {
- append leftDelim "\\left" [lindex $delims 0]
- append rightDelim "\\right" [lindex $delims 1]
- delimitObject "$leftDelim" "$rightDelim•"
- }
- }
- proc bigLeftBrace {} { delimitObject "\\left\\\{" "\\right.•" }
- proc otherMixedBigDelims {} {
- catch {prompt "Choose LEFT delimiter:" "parenthesis" "" "parenthesis" \
- "bracket" "brace" "vertical bar" "double bar" \
- "angle bracket" "ceiling" "floor" "slash" "backslash" \
- "none"} delimType
- if {$delimType != "cancel"} then {
- case $delimType in {
- "parenthesis" {set leftDelim "("}
- "bracket" {set leftDelim "\["}
- "brace" {set leftDelim "\\\{"}
- "{vertical bar}" {set leftDelim "|"}
- "{double bar}" {set leftDelim "\\|"}
- "{angle bracket}" {set leftDelim "\\langle"}
- "ceiling" {set leftDelim "\\lceil"}
- "floor" {set leftDelim "\\lfloor"}
- "slash" {set leftDelim "/"}
- "backslash" {set leftDelim "\\backslash"}
- "none" {set leftDelim "."}
- default {
- alertnote "\"$delimType\" not recognized"
- return
- }
- }
- catch {prompt "Choose RIGHT delimiter:" "parenthesis" "" "parenthesis" \
- "bracket" "brace" "vertical bar" "double bar" \
- "angle bracket" "ceiling" "floor" "slash" "backslash" \
- "none"} delimType
- if {$delimType != "cancel"} then {
- case $delimType in {
- "parenthesis" {set rightDelim ")"}
- "bracket" {set rightDelim "\]"}
- "brace" {set rightDelim "\\\}"}
- "{vertical bar}" {set rightDelim "|"}
- "{double bar}" {set rightDelim "\\|"}
- "{angle bracket}" {set rightDelim "\\rangle"}
- "ceiling" {set rightDelim "\\rceil"}
- "floor" {set rightDelim "\\rfloor"}
- "slash" {set rightDelim "/"}
- "backslash" {set rightDelim "\\backslash"}
- "none" {set rightDelim "."}
- default {
- alertnote "\"$delimType\" not recognized"
- return
- }
- }
- delimitObject "\\left$leftDelim" "\\right$rightDelim•"
- }
- }
- }
-
- #--------------------------------------------------------------------------
- # Accents:
- #--------------------------------------------------------------------------
-
- proc acute {} {
- if {[isSelection] > 1} then {
- alertnote "Warning: only a single character may be accented!"
- }
- if {[wrapObject "\\acute{" "}•"]} then {
- message "accent set"
- } else {
- message "enter one character"
- }
- }
- proc bar {} {
- if {[isSelection] > 1} then {
- alertnote "Warning: only a single character may be accented!"
- }
- if {[wrapObject "\\bar{" "}•"]} then {
- message "accent set"
- } else {
- message "enter one character"
- }
- }
- proc breve {} {
- if {[isSelection] > 1} then {
- alertnote "Warning: only a single character may be accented!"
- }
- if {[wrapObject "\\breve{" "}•"]} then {
- message "accent set"
- } else {
- message "enter one character"
- }
- }
- proc check {} {
- if {[isSelection] > 1} then {
- alertnote "Warning: only a single character may be accented!"
- }
- if {[wrapObject "\\check{" "}•"]} then {
- message "accent set"
- } else {
- message "enter one character"
- }
- }
- proc dot {} {
- if {[isSelection] > 1} then {
- alertnote "Warning: only a single character may be accented!"
- }
- if {[wrapObject "\\dot{" "}•"]} then {
- message "accent set"
- } else {
- message "enter one character"
- }
- }
- proc ddot {} {
- if {[isSelection] > 1} then {
- alertnote "Warning: only a single character may be accented!"
- }
- if {[wrapObject "\\ddot{" "}•"]} then {
- message "accent set"
- } else {
- message "enter one character"
- }
- }
- proc grave {} {
- if {[isSelection] > 1} then {
- alertnote "Warning: only a single character may be accented!"
- }
- if {[wrapObject "\\grave{" "}•"]} then {
- message "accent set"
- } else {
- message "enter one character"
- }
- }
- proc hat {} {
- if {[isSelection] > 1} then {
- alertnote "Warning: only a single character may be accented!"
- }
- if {[wrapObject "\\hat{" "}•"]} then {
- message "accent set"
- } else {
- message "enter one character"
- }
- }
- proc tilde {} {
- if {[isSelection] > 1} then {
- alertnote "Warning: only a single character may be accented!"
- }
- if {[wrapObject "\\tilde{" "}•"]} then {
- message "accent set"
- } else {
- message "enter one character"
- }
- }
- proc vec {} {
- if {[isSelection] > 1} then {
- alertnote "Warning: only a single character may be accented!"
- }
- if {[wrapObject "\\vec{" "}•"]} then {
- message "accent set"
- } else {
- message "enter one character"
- }
- }
-
- proc widehat {} {
- if {[isSelection] > 3} then {
- alertnote "Warning: only a few characters may be accented!"
- }
- if {[wrapObject "\\widehat{" "}•"]} then {
- message "accent set"
- } else {
- message "enter a few characters"
- }
- }
- proc widetilde {} {
- if {[isSelection] > 3} then {
- alertnote "Warning: only a few characters may be accented!"
- }
- if {[wrapObject "\\widetilde{" "}•"]} then {
- message "accent set"
- } else {
- message "enter a few characters"
- }
- }
-
- proc imath {} {insertObject "\\imath"}
- proc jmath {} {insertObject "\\jmath"}
-
- #--------------------------------------------------------------------------
- # Grouping:
- #--------------------------------------------------------------------------
-
- proc underline {} {
- if {[wrapObject "\\underline{" "}•"]} then {
- message "selection underlined"
- } else {
- message "enter text"
- }
- }
- proc overline {} {
- if {[wrapObject "\\overline{" "}•"]} then {
- message "selection overlined"
- } else {
- message "enter text"
- }
- }
- proc underbrace {} {
- if {[wrapObject "\\underbrace{" "}•"]} then {
- message "selection underbraced"
- } else {
- message "enter text"
- }
- }
- proc overbrace {} {
- if {[wrapObject "\\overbrace{" "}•"]} then {
- message "selection overbraced"
- } else {
- message "enter text"
- }
- }
- proc stackrel {} {
- set currentPos [getPos]
- if {[insertObject "\\stackrel{•}{•}•"]} then {
- goto $currentPos
- nextTabStop
- message "1st arg scriptstyle"
- }
- }
-
- #--------------------------------------------------------------------------
- # Spacing:
- #--------------------------------------------------------------------------
-
- proc negThin {} {insertObject "\\!"}
- proc thin {} {insertObject "\\,"}
- proc medium {} {insertObject "\\:"}
- proc thick {} {insertObject "\\;"}
- proc quad {} {insertObject "\\quad"}
- proc qquad {} {insertObject "\\qquad"}
- proc hspace {} {
- if {[wrapObject "\\hspace{" "}•"]} then {
- message "spacing set"
- } else {
- message "enter the desired horizontal spacing"
- }
- }
- proc vspace {} {
- if {[wrapObject "\\vspace{" "}•"]} then {
- message "spacing set"
- } else {
- message "enter the desired horizontal spacing"
- }
- }
- proc hfill {} {insertObject "\\hfill"}
- proc vfill {} {insertObject "\\vfill"}
- proc smallskip {} {insertObject "\\smallskip"}
- proc medskip {} {insertObject "\\medskip"}
- proc bigskip {} {insertObject "\\bigskip"}
-
-
- #############################################################################
- #
- # LaTeX Menu Definition
- #
- # (see file "latexMenu.tcl")
- #
- #############################################################################
-
- source "$HOME:Tcl:SystemCode:latexMenu.tcl"
- buildLaTeXMenu
-
-
- #############################################################################
- #
- # Special LaTeX Key Bindings
- #
- # (see file "latexKeys.tcl")
- #
- #############################################################################
-
- source "$HOME:Tcl:SystemCode:latexKeys.tcl"
- bindLaTeXKeys
-
-